//=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|
// DESCRICAO:
//    Programa que mostra como usar a classe Gnuplot
//________________________________________________________
//A.Z. - 01/06 => Criacao a partir do exemplo de Rajarshi Guha
//=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|=|
#include <vector>
#include <iostream>
#include "gnuplot.h"
using namespace std;



int main( void ){
  const int SLEEP_LGTH =  1;
  const int NPOINTS    = 50;
  vector<double> x(NPOINTS), y(NPOINTS);
  Gnuplot g1;
  cout << "Exemplo de uso da classe Gnuplot" << endl;


  // Plota varias equacoes
  g1.resetPlot();
  cout << "\n\nVarias equacoes" << endl;
  cout << "  y = sin(x)" << endl;
  g1.plotEquation("sin(x)","Seno");
  sleep(SLEEP_LGTH);

  cout << "  y = log(x)" << endl;
  g1.plotEquation("log(x)","Logaritmo");
  sleep(SLEEP_LGTH);

  cout << "y = sin(x) * cos(2*x)" << endl;
  g1.plotEquation("sin(x)*cos(2*x)","Produto de senos");
  sleep(SLEEP_LGTH);


  // Estilos
  g1.resetPlot();
  cout << "\n\nVarios estilos diferentes" << endl;
  cout << "  Seno com pontos" << endl;
  g1.plotWith("points");
  g1.plotEquation("sin(x)","seno");
  sleep(SLEEP_LGTH);

  cout << "  Seno com impulsos" << endl;
  g1.plotWith("impulses");
  g1.plotEquation("sin(x)","seno");
  sleep(SLEEP_LGTH);

  cout << "  Seno em colunas" << endl;
  g1.plotWith("steps");
  g1.plotEquation("sin(x)","seno");
  sleep(SLEEP_LGTH);


  // Plota vectors
  cout << "\n\nPlota pontos definidos pelo usuario" << endl;
  for( int i=0; i<NPOINTS; i++)
    x[i] = i*i*1.0;
  g1.resetPlot();
  g1.plotWith("impulses");
  g1.plot(x,"valores definidos pelo usuario.");
  sleep(SLEEP_LGTH);


  y = x;
  for( int i = 0; i<NPOINTS; i++)
    x[i] = 1.0*i;
  g1.resetPlot();
  g1.plotWith("points");
  g1.plot(x,y,"valores definidos pelo usuario.");
  sleep(SLEEP_LGTH);


  // Varias janelas
  cout << "\n\nMultiplas janelas" << endl;
  g1.resetPlot();
  g1.plotWith("lines");

  Gnuplot g2 = Gnuplot("lines");
  Gnuplot g3 = Gnuplot("lines");
  Gnuplot g4 = Gnuplot("lines");

  cout << "  Janela 1: sin(x)" << endl;
  g1.plotEquation("sin(x)","sin(x)");
  sleep(SLEEP_LGTH);

  cout << "  Janela 2: x*sin(x)" << endl;
  g2.plotEquation("x*sin(x)","x*sin(x)");
  sleep(SLEEP_LGTH);

  cout << "  Janela 3: log(x)/x" << endl;
  g3.plotEquation("log(x)/x","log(x)/x");
  sleep(SLEEP_LGTH);

  cout << "  Janela 4: sin(x)/x" << endl;
  g4.plotEquation("sin(x)/x","sin(x)/x");
  sleep(SLEEP_LGTH);


  return 0;
}
